﻿using System.Collections.Generic;
using System.Linq;
using System;

namespace Recursos.Model
{
    public class UsuarioModel
    {

       public IList<Usuario> CargarProfesor()
        {
            var datacontext = new DataClassesRecursosDataContext();
            var usuario = new Repository<Usuario>(datacontext);
            return usuario.SearchFor((s =>s.IdPuesto == 4)).ToList();
        }

       public IList<Usuario> CargarUsuarios()
       {
           var datacontext = new DataClassesRecursosDataContext();
           var usuario = new Repository<Usuario>(datacontext);
           return usuario.SearchFor(s => s.Nombre != "sin asignar").ToList();
       }

       public IList<RolXUsuario> CargarUsuarioModificar()
       {
           var datacontext = new DataClassesRecursosDataContext();
           var usuario = new Repository<RolXUsuario>(datacontext);
           return usuario.SearchFor(s => s.Usuario.Nombre != "sin asignar" && s.Usuario.Borrado==false).ToList();
       }

       public int ComprobarUsuario(int cedula, string nombreusuario, bool estudiante)
       {
           var datacontext = new DataClassesRecursosDataContext();
           var usuario = new Repository<Usuario>(datacontext);
           return usuario.SearchOne(s => (s.Cedula == cedula && s.Borrado == false && (estudiante == s.Puesto.Nombre.Equals("Estudiante"))) || s.usuario1 == nombreusuario).id;
       }



      

       public int ComprobarUsuarioActualizar(int cedula, int id, string nombreusuario, bool estudiante)
       {
           var datacontext = new DataClassesRecursosDataContext();
           var usuario = new Repository<Usuario>(datacontext);
           return usuario.SearchOne(s => (s.Cedula == cedula && s.Borrado == false  && (estudiante == s.Puesto.Nombre.Equals("Estudiante"))) || s.usuario1 == nombreusuario).id;
       }



       public Usuario CargarPorId(int id)
       {
           var datacontext = new DataClassesRecursosDataContext();
           var usuario = new Repository<Usuario>(datacontext);
           return usuario.GetById(id);
       }

       public int ElimianrUsuario(int idusario)
       {
            try
           {
               var reservacion = ComprobarReservacionProfesor(idusario);
               if (reservacion == false)
               {
                
                 var datacontext = new DataClassesRecursosDataContext();
                 var usuario = new Repository<Usuario>(datacontext);
                 usuario.Delete(idusario);
                 datacontext.SubmitChanges();
                   return 1;
               }
               else
                   return 0;
           }
            catch (Exception)
            {

                var datacontext = new DataClassesRecursosDataContext();
                var usuario = new Repository<Usuario>(datacontext);
                usuario.Delete(idusario);
                datacontext.SubmitChanges();
                return 1;
            }
            return 0;
       }
       public bool ComprobarReservacionProfesor(int idusuario)
       {
           var datacontext = new DataClassesRecursosDataContext();
           var reservacion = new Repository<Grupo>(datacontext);
           var reservaciones= reservacion.SearchFor(s => s.IdProfesor == idusuario && s.Borrado == false);
           bool conflicto = false;
           foreach (var r in reservaciones)
           {
               var añoactual = System.DateTime.Now.Year;
               var reservacioncurso = new Repository<Periodo>(datacontext);
               var añoperiodo=reservacioncurso.GetById(r.IdPeriodo).Año;
               if (añoactual >= añoperiodo)
                   conflicto = true;

           }
           return conflicto;
       }


       public int ActualizarUsuario(string nombre, int cedula, int idpuesto, int idcarrera, string contraseñas, string correos, string nombreusuario,int idusuario,int rolelegido)
       {
             var datacontext = new DataClassesRecursosDataContext();
                   var usuarios = new Repository<Usuario>(datacontext);
                   var roles = new Repository<RolXUsuario>(datacontext);
                   var rol = roles.SearchOne(s => s.Usuario.id == idusuario);

                   var usuario = usuarios.GetById(idusuario);
                   usuario.IdPuesto = idpuesto;
                   usuario.IdCarrera = idcarrera;
                   usuario.Cedula = cedula;
                   if(contraseñas!="")
                         usuario.contraseña = contraseñas;
                   usuario.correo = correos;
                   usuario.usuario1 = nombreusuario;
                   rol.IdRol = rolelegido;
                   datacontext.SubmitChanges();
                   return 1;
 
               
          
       }

       public int CrearUsuario(string nombre, int cedula, int idpuesto, int idcarrera,string contraseñas,string correos,string nombreusuario, int rol)
       {
           var datacontext = new DataClassesRecursosDataContext();
           var usuarios = new Repository<Usuario>(datacontext);
           var rolxusuarios = new Repository<RolXUsuario>(datacontext);
           var usuario = new Usuario { usuario1=nombreusuario, Nombre =nombre, Cedula = cedula,IdPuesto= idpuesto, IdCarrera = idcarrera,contraseña=contraseñas,correo=correos,Borrado=false};
           var rolxusuario = new RolXUsuario();
           
           usuarios.Insert(usuario);

           datacontext.SubmitChanges();
           rolxusuario.IdUsuario = usuario.id;
           rolxusuario.IdRol = rol;
           rolxusuarios.Insert(rolxusuario);
           datacontext.SubmitChanges();
           return 1;
       }
    }
}